/**
 * \file Prime.cpp
 * \brief Implémentation de fonction sur les nombres premiers
 * \author Abder
 * \version 0.1
 * \date décembre 2011
 */

#include "Prime.h"
#include <cmath>

/**
 *  \brief Cherche le prochain nombre premier aprés n
 *  \fn int nextPrime (int n)
 *  \return int
 *  \param int
 * 	\post On assume que n est > 0
 */
int nextPrime (int n)
{
	if(n%2 == 0)
		n++;
	while(!isPrime(n))
		n+=2;
	return n;
}

/**
 *  \brief Vérifie si n est premier
 *	\fn bool isPrime (int n)
 *	\return bool
 *	\param int
 *	\post On assume que n est > 0
 */
bool isPrime (int n)
{
	if (n <= 1)
		return false;
	if (n == 2)              // le seul nombre premier pair
		return true;
	else if (n % 2 == 0)     // sinon, ce n'est pas un nombre premier
		return false;
	else
		{
			int divisor = 3;
			int upperLimit = static_cast<int>(sqrt((float)n) + 1);

			while (divisor <= upperLimit)
				{
					if (n % divisor == 0)
						return false;
					divisor +=2;
				}
			return true;
		}
}
